<?php


namespace app\Services;

/**
 *
 *
 * User: Implement hdjahs@qq.com
 * Date: 2020/12/7 23:28
 */
class tstring
{
    public static function checkStringLength($c, $size)
    {

    }

    public function setCommand($c)
    {
//int j;
//robj *expire = NULL;
//int unit = UNIT_SECONDS;
//int flags = REDIS_SET_NO_FLAGS;
//
//    // 设置选项参数
//for (j = 3; j < c->argc; j++) {
//char *a = c->argv[j]->ptr;
//robj *next = (j == c->argc-1) ? NULL : c->argv[j+1];
//
//if ((a[0] == 'n' || a[0] == 'N') &&
//(a[1] == 'x' || a[1] == 'X') && a[2] == '\0') {
//flags |= REDIS_SET_NX;
//} else if ((a[0] == 'x' || a[0] == 'X') &&
//    (a[1] == 'x' || a[1] == 'X') && a[2] == '\0') {
//    flags |= REDIS_SET_XX;
//} else if ((a[0] == 'e' || a[0] == 'E') &&
//    (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) {
//    unit = UNIT_SECONDS;
//    expire = next;
//    j++;
//} else if ((a[0] == 'p' || a[0] == 'P') &&
//    (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) {
//    unit = UNIT_MILLISECONDS;
//    expire = next;
//    j++;
//} else {
//    addReply(c,shared.syntaxerr);
//    return;
//}
//}
//
//// 尝试对值对象进行编码
//c->argv[2] = tryObjectEncoding(c->argv[2]);
        (new object())->tryObjectEncoding();
//    setGenericCommand(c,flags,c->argv[1],c->argv[2],expire,unit,NULL,NULL);
        $this->setGenericCommand();
    }

    public function setGenericCommand($c, $flags, $key, $val, $expire, $unit, $ok_reply, $abort_reply)
    {

//long long milliseconds = 0; /* initialized to avoid any harmness warning */
//
//    // 取出过期时间
//if (expire) {
//
//    // 取出 expire 参数的值
//    // T = O(N)
//if (getLongLongFromObjectOrReply(c, expire, &milliseconds, NULL) != REDIS_OK)
//return;
//
//    // expire 参数的值不正确时报错
//if (milliseconds <= 0) {
//addReplyError(c,"invalid expire time in SETEX");
//return;
//}
//
//// 不论输入的过期时间是秒还是毫秒
//// Redis 实际都以毫秒的形式保存过期时间
//// 如果输入的过期时间为秒，那么将它转换为毫秒
//if (unit == UNIT_SECONDS) milliseconds *= 1000;
//}
//
//// 如果设置了 NX 或者 XX 参数，那么检查条件是否不符合这两个设置
//// 在条件不符合时报错，报错的内容由 abort_reply 参数决定
//if ((flags & REDIS_SET_NX && lookupKeyWrite(c->db,key) != NULL) ||
//        (flags & REDIS_SET_XX && lookupKeyWrite(c->db,key) == NULL))
//    {
//        addReply(c, abort_reply ? abort_reply : shared.nullbulk);
//        return;
//    }
//
//    // 将键值关联到数据库
//    setKey(c->db,key,val);
//
//    // 将数据库设为脏
//    server.dirty++;
//
//    // 为键设置过期时间
//    if (expire) setExpire(c->db,key,mstime()+milliseconds);
//
//    // 发送事件通知
//    notifyKeyspaceEvent(REDIS_NOTIFY_STRING,"set",key,c->db->id);
//
//    // 发送事件通知
//    if (expire) notifyKeyspaceEvent(REDIS_NOTIFY_GENERIC,
//        "expire",key,c->db->id);
//
//    // 设置成功，向客户端发送回复
//    // 回复的内容由 ok_reply 决定
//    addReply(c, ok_reply ? ok_reply : shared.ok);
        (new networking)->addReply();
    }
}